<?php

	require_once CORMO_DIR_CORE.'Object.class.php';
	require_once CORMO_DIR_CORE.'Connection.class.php';

	/**
	 * Generador de los Objetos Sql<Object> a partir de lo definido en Schema.php.
	 * Escribe la Class para cada Objeto de Schema.
	 *
     * @category cormo
     * @package Generator
     * @author Germán Dario Peraferrer <gperaferrer@gmail.com>
     * @copyright Copyright (c) 2007 Germán Dario Peraferrer - Beetec
     * @version 1.0 Beta
     * @license http://www.opensource.org/licenses/bsd-license.php New BSD License
     * @link http://code.google.com/p/cormoframework/
     * @link http://www.beetec.com.ar
	 */

	class SqlCreate extends Object {

		//private $connection;

		function __construct($nameObjectORM) {
			parent::__construct($nameObjectORM);

		}

		function __toString() {
			// Recuperamos la conexi�n del Objeto para idetificar el Driver y crear la Sentencia SQL
			$connection = new Connection($this->getConnection());

			// Verificamos si se encuentran los datos basicos para crear la Conexi�n
			if ($connection->isValidConfig()) {
				$return = '';

				// Identificamos el Tipo de Base de Datos
				switch (strtolower($connection->getType())) {

					case 'mssql':
							$return = 'CREATE TABLE '.$this->getConfigTableName()." ( \n";
							$return .= '  '.$this->getConfigKey().' int PRIMARY KEY IDENTITY';
							// Agregamos el resto de los campos
							foreach($this->getConfigFieldsNotKey() as $field) {
								$return .= ",\n";
								// Verificamos si se trata de un campo que esta asociado a otra tabla
								if (in_array($field, $this->getConfigTableAssociate())) {
									$return .= '  '.$field.' int NOT NULL';
								} else {
									$return .= '  '.$field.' varchar(255) NOT NULL';
								}
							}
							$return .= "\n)";
						break;

					case 'mysql':
							$return = 'CREATE TABLE `'.$this->getConfigTableName()."` ( \n";
							$return .= '  '.$this->getConfigKey().' int NOT NULL AUTO_INCREMENT';
							$primaryKey = '  PRIMARY KEY (`'.$this->getConfigKey().'`)'."\n";
							// Agregamos el resto de los campos
							foreach($this->getConfigFieldsNotKey() as $field) {
								$return .= ",\n";
								// Verificamos si se trata de un campo que esta asociado a otra tabla
								if (in_array($field, $this->getConfigTableAssociate())) {
									$return .= '  `'.$field.'` int NOT NULL';
								} else {
									$return .= '  `'.$field.'` varchar(255) NOT NULL';
								}
							}
							$return .= ",\n".$primaryKey.")";
						break;

					default:
							$this->Message()->setMessage($this->getConfigObjectName().' - No se ha logrado identificar el Tipo de Base de Datos');
							$return = $this->getConfigObjectName().' - '.$connection->getType().': Tipo de Base de Datos no soportado para la generación de Sentencia SQL CREATE.';
						break;
				}


			} else {
				$this->Message()->setMessage('Configuración de la Conexión incompleta, por favor verifique la misma.');
				$return = 'Configuración de la Conexión incompleta, por favor verifique la misma.';
			}

			return $return;

		}

	}

?>